home *** CD-ROM | disk | FTP | other *** search
/ FishMarket 1.0 / FishMarket v1.0.iso / fishies / 301-325 / disk_311 / udate / udate.c < prev    next >
C/C++ Source or Header  |  1992-05-06  |  23KB  |  711 lines

  1. /*-------------------------------------------------------------------------*/
  2. /*      program: date                                                      */
  3. /*      Purpose: display a formatted date/time or set system date/time.    */
  4. /*   Programmer: George Kerber                                             */
  5. /*      Written: 06/27/89                                                  */
  6. /*     Compiler: Lattice 5.04                                              */
  7. /*-------------------------------------------------------------------------*/
  8.  
  9. #include <stdio.h>
  10. #include <dos.h>
  11. #include <stdlib.h>
  12. #include <string.h>
  13. #define WRITTEN "06/27/89 - 01/14/90"
  14. #define VERSION "v1.15c"
  15. #define AUTHOR "George Kerber"
  16.  
  17. int  ampm();                   /*  declare functions  */
  18. int  dateset();
  19. void defaultdate();
  20. char *ext();
  21. void helpscreen();
  22. void main();
  23. void mistake();
  24. void quitcheck();
  25. void setdate();
  26. int  twelve();
  27.  
  28. void main(int argc, char *argv[])
  29. int i, j, length, nflag = 0, dflag = 0 , next = 1 , counter = -1 ;
  30. char option , leadspacer[80] , *odata , *timezone, node[33], opts[] = "m" ;
  31. char format[80];
  32. int escape_char = '*', tznflag = 0, y_fix = 80;
  33. unsigned char clock[8];
  34. int daymax[13] = {0,31,28,31,30,31,30,31,31,30,31,30,31};
  35. char day[7][4] = {"Sun","Mon","Tue","Wed","Thu","Fri","Sat"};
  36. char dayext[7][4] = {"","","s","nes","rs","","ur"};
  37. char month[13][4] = {"","Jan","Feb","Mar","Apr","May","Jun","Jul","Aug",
  38.                      "Sep","Oct","Nov","Dec"};
  39. char monthext[13][7] = {"","uary","ruary","ch","il","","e","y","ust",
  40.                         "tember","ober","ember","ember"};
  41. leadspacer[0] = '\0';
  42.  
  43. /*----- Sets escape value ----- temporary use of *timezone ----------------*/
  44.  
  45. timezone = getenv("ESCAPE");
  46. if(timezone != NULL) escape_char = *timezone;
  47.  
  48. /*----- Help Screen -------------------------------------------------------*/
  49.  
  50. stcgfn(node,argv[0]);
  51. if(argc == 2 && argv[1][0] == '?') helpscreen(escape_char,node);
  52.  
  53. getclk(clock);   /*  gets current system clock settings  */
  54. if(clock[1] > 19) y_fix = -20;
  55.  
  56. /*------------------------------------------------------*/
  57.  
  58. /*  Is this a date or time change request ???  */
  59. length = strlen(argv[1]);
  60. if(length > 2 && length < 9 && 
  61.    !dateset(argv[0],argv[1],length,daymax,month,monthext,node,clock)) 
  62.    exit(0);
  63.  
  64. /*---------------------------------------*/
  65.  
  66. for( ; (odata = argopt(argc,argv,opts,&next,&option)) != NULL ; ) {
  67.    switch(toupper(option)) {
  68.       case 'C':  printf("\x0c"); break;
  69.       case 'N':  nflag = 1; break ;
  70.       case 'D':  if(isdst(clock)) {
  71.                     clock[4]++;
  72.                     if(chgclk(clock)) mistake("Can't Correct for DST",node);
  73.                     }
  74.                  getclk(clock);
  75.                  dflag++;
  76.                  break;
  77.       case 'S':  setdate(clock,daymax,month,monthext,node); break ;
  78.       case 'M':  i = atoi(odata);
  79.                  if(!i || i > 69) mistake("Entry must be 1 - 69",node);
  80.                  for( ; i > 0 ; strcat(leadspacer," "), i--) ;
  81.                  break;
  82.        default:  mistake("Invalid Option",node); break;
  83.       }
  84.    }
  85.  
  86. if(argc > (next + 1)) mistake("Extra option or Unquoted format string",node);
  87.  
  88. /*---- SET TIMEZONE if set ------------------------------------------------*/
  89. timezone = getenv("TIMEZONE");
  90. i = strlen(timezone);
  91. if(i == 3 || i == 7) {
  92.    if(isdst(clock) && i == 7) {
  93.       timezone[0] = timezone[4]; 
  94.       timezone[1] = timezone[5]; 
  95.       timezone[2] = timezone[6]; 
  96.       }
  97.    timezone[3] = '\0'; tznflag++;
  98.    }
  99.    else {
  100.    timezone[0] = '\0';
  101.    }
  102. /*------------------------------------------------------------------------*/
  103.  
  104. printf("%s",leadspacer);
  105.  
  106. /*-----------------------------*/
  107. if(argc == next ) {
  108.    if(!dflag) {
  109.       odata = getenv("DEFAULT");
  110.       if(odata[0] != NULL) {
  111.          strcpy(format,odata);
  112.          }
  113.          else {
  114.          defaultdate(tznflag,timezone,day,dayext,month,clock,y_fix);
  115.          if(!nflag) printf("\n");
  116.          exit(0);
  117.          }
  118.       }           
  119.    }
  120.    else {
  121.    strcpy(format,argv[next]);
  122.    }
  123. /*-----------------------------*/
  124.  
  125. while(format[++counter] != (char *)NULL) {
  126.    if(format[counter] == escape_char ) {
  127.       if(format[++counter] == escape_char ) {
  128.         printf("%c",escape_char);
  129.         continue;
  130.         }
  131.       switch(format[counter]) {
  132.                     /*  abbreviated weekday name  */
  133.          case 'a':  printf("%s",day[clock[0]]); break ;
  134.  
  135.                     /*  full weekday name  */
  136.          case 'A':  printf("%s%sday",day[clock[0]],dayext[clock[0]]); break ;
  137.  
  138.          case 'h':  /*  abbreviated month name  */
  139.          case 'b':  printf("%s",month[clock[2]]); break ;
  140.  
  141.                     /*  full month name  */
  142.          case 'B':  printf("%s%s",month[clock[2]],monthext[clock[2]]); 
  143.                     break;
  144.  
  145.                     /*  day of month 01 to 31   */
  146.          case 'd':  printf("%02d",clock[3]); break ;
  147.  
  148.                     /*  prints date as mm/dd/yy  */
  149.          case 'D':  printf("%02d/%02d/%02d",
  150.                             clock[2],
  151.                             clock[3],
  152.                             clock[1] + y_fix);
  153.                     break;
  154.  
  155.          case 'E':  /* day of month 1 to 31 */
  156.          case 'e':  printf("%2d",clock[3]); break ;
  157.  
  158.          case 'o':
  159.          case 'k':  /* greeting and date and time  */
  160.          case 'g':  if(format[counter] == 'g' ||
  161.                        format[counter] == 'o') {; 
  162.                     printf("Good "); 
  163.                     if(clock[4] < 12) {
  164.                        printf("Morning");
  165.                        }
  166.                     else if(clock[4] < 17) {
  167.                        printf("Afternoon");
  168.                        }
  169.                     else {
  170.                        printf("Evening");
  171.                        }
  172.                     }
  173.  
  174.                     if(format[counter] == 'g') printf("!    "); 
  175.                     if(format[counter] == 'k' ||
  176.                        format[counter] == 'g') {
  177.                    printf("Today is %s%sday, %s%s %d%s, %02d at %d:%02d %cM",
  178.                        day[clock[0]],
  179.                        dayext[clock[0]],
  180.                        month[clock[2]],
  181.                        monthext[clock[2]],
  182.                        clock[3],
  183.                        ext(clock[3]),
  184.                        clock[1] + 1980,
  185.                        twelve(clock[4]),
  186.                        clock[5],
  187.                        ampm(clock[4]));
  188.                     if(tznflag) printf(" (%s)",timezone);
  189.                     }
  190.                     break;
  191.  
  192.                     /*  hour 00 to 23  */
  193.          case 'H':  printf("%02d",clock[4]); break ;
  194.  
  195.                      /*  hour 01 to 12  */
  196.          case 'i':  printf("%d",twelve(clock[4])); break;
  197.  
  198.                     /*  hour 01 to 12  */
  199.          case 'I':  printf("%02d",twelve(clock[4])); break;
  200.                     
  201.          case 'J':  /*  julian date and days remaining in year  */
  202.          case 'j':  if((clock[1] + 1980) % 4 == 0) daymax[2] = 29 ;
  203.                     for(i = 1, j = 0 ; i != clock[2] ; j += daymax[i++] );
  204.                     j += clock[3];
  205.                     if(format[counter] == 'j') { printf("%d",j); break; }
  206.                     if(daymax[2] == 28) i = 365; else i = 366;
  207.                     printf("%d",i - j);
  208.                     break;  
  209.  
  210.                     /*  month of year 01-12  */
  211.          case 'm':  printf("%02d",clock[2]); break ;
  212.  
  213.          case 'N':  /*  creates newline  */
  214.          case 'n':  printf("\n"); break ;
  215.  
  216.                     /*  time as hh:mm:ss pp, pp is "am" or "pm" */
  217.          case 'r':  printf("%02d:%02d:%02d ",
  218.                            twelve(clock[4]),
  219.                            clock[5],
  220.                            clock[6]);
  221.                     /*  no break since am/pm is next  */
  222.  
  223.                     /*  string containing "am" or "pm"  */
  224.          case 'p':  printf("%cM",ampm(clock[4]));
  225.                     break;
  226.  
  227.                     /* time as hh:mm  */
  228.          case 'R':  printf("%02d:",clock[4]);
  229.                     /*  no break since minute is next  */
  230.  
  231.          case 'M':  printf("%02d",clock[5]); break ;
  232.  
  233.                     /*  insert a tab character */
  234.          case 't':  printf("\t"); break ;
  235.  
  236.                     /*  prints time as hh:mm:ss  */
  237.          case 'T':  printf("%02d:%02d:",clock[4],clock[5]);
  238.                     /*  no break since seconds is next  */
  239.  
  240.                     /*  seconds 00 - 59  */
  241.          case 'S':  printf("%02d",clock[6]); break ;
  242.  
  243.                     /*  prints day of week integer, Sunday = 0  */
  244.          case 'w':  printf("%d",clock[0]); break ;
  245.  
  246.                     /*  prints day of week integer, Sunday = 1  */
  247.          case 'W':  printf("%d",clock[0] + 1); break ;
  248.  
  249.                     /*  prints two character year  */
  250.          case 'y':  printf("%d",clock[1] + y_fix); break ;
  251.    
  252.          case 'q':  printf("\""); break;
  253.  
  254.          case 'c':
  255.          case 'C':  printf("%s %02d-%s-%02d %02d:%02d",
  256.                        day[clock[0]],
  257.                        clock[3],
  258.                        month[clock[2]],
  259.                        clock[1] + y_fix,
  260.                        clock[4],
  261.                        clock[5]);
  262.                     if(tznflag) printf(" %s",timezone); 
  263.                     break;
  264.  
  265.          case 'z':  /*  timezone name  */
  266.          case 'Z':  if(tznflag) printf("%s",timezone); break;
  267.                    
  268.                     /* displays default date string via descriptor  */ 
  269.          case '$':  defaultdate(tznflag,timezone,day,dayext,month,clock,y_fix);
  270.                     break;
  271.  
  272.          case 'U':  /* UNIX type date  */
  273.          case 'u':  printf("%s %s %2d %02d:%02d:%02d ",
  274.                        day[clock[0]], 
  275.                        month[clock[2]],
  276.                        clock[3],
  277.                        clock[4],
  278.                        clock[5],
  279.                        clock[6]);
  280.                     if(tznflag) printf("%s ",timezone);
  281.                     /*  no break since year is next  */
  282.  
  283.                     /*  prints year as ccyy  */
  284.          case 'Y':  printf("%4d",clock[1] + 1980); break ;
  285.  
  286.          case 'X':  /*  prints date extension ex: th, nd, rd  */     
  287.          case 'x':  printf("%s",ext(clock[3])); break;
  288.  
  289.          case '0':  printf(""); break ;  /* Blue pen color         */
  290.          case '1':  printf(""); break ;  /* White pen color        */
  291.          case '2':  printf(""); break ;  /* Black pen color        */
  292.          case '3':  printf(""); break ;  /* Orange pen color       */
  293.          case '4':  printf("");  break ;  /* Default colors         */
  294.          case '5':  printf("");  break ;  /* Boldface               */
  295.          case '6':  printf("");  break ;  /* Underline              */
  296.          case '7':  printf("");  break ;  /* Italics                */
  297.          case ')':  printf(""); break;   /* color 0 bkgnd          */
  298.          case '!':  printf(""); break;   /* color 1 bkgnd          */
  299.          case '@':  printf(""); break;   /* color 2 bkgnd          */
  300.          case '#':  printf(""); break;   /* color 3 bkgnd     */
  301.  
  302.           default:  printf("\n\07  ERROR: %s  Bad Format Character. \(%c%c\)\n\n",
  303.                        node,format[--counter],
  304.                        format[++counter]);
  305.                     exit(5);
  306.          }
  307.       }
  308.       else {
  309.       putchar(format[counter]);
  310.       }
  311.    continue;
  312.    }
  313. printf("");
  314. if(!nflag) printf("\n");
  315. exit(0);    /*  exit for good date formatting   */
  316. }
  317.  
  318. /*-------------------------------------------------------------------------*/
  319.  
  320. /*  AMPM FUNCTION  */
  321.  
  322. int ampm(int hour)
  323. {
  324. if(hour < 12) return('A'); else return('P');
  325. }
  326.  
  327. /*-------------------------------------------------------------------------*/
  328.  
  329. /*  DATESET FUNCTION  !!!! */
  330.  
  331. int dateset(char name[],char tempy[],int length,int daymax[13],char month[13][4],char monthext[13][7],char node[],unsigned char clock[8])
  332. {
  333. int h = 0, i, j, k = 0, slash = 0, colon = 0;
  334. char date[80];
  335. char *s1, *s2, temp[3][6];
  336. static char delim[] = "/-:";
  337.  
  338. strcpy(date,tempy);                  /* this is necessary for some reason */
  339. for( i = 0 ; i != length ; i++ ) {   /* or else argv[1] gets changed      */
  340.    if(date[i] == '\\') return(1);    /* I have no idea why ????           */  
  341.    else if(date[i] == ':') colon++;
  342.    else if(date[i] == '/' || date[i] == '-') slash++;
  343.    else if(!isdigit(date[i])) return(1);
  344.    }
  345. if((colon && slash) || (!colon && !slash)) return(1);
  346. i = strlen(date);
  347. if(colon && i != 4 && i != 5) return(1);
  348.  
  349. s1 = date;
  350. while((s2 = strtok(s1,delim)) != NULL) {      /* break out seperate month */
  351.    strcpy(temp[h],s2);                        /* day, year, hour & minute */
  352.    if(h++ > 3) break;
  353.    s1 = NULL;
  354.    }
  355. if(colon > 1 || slash > 2) return(1); 
  356.  
  357. i =  atoi(temp[0]); j = atoi(temp[1]); 
  358.  
  359. if(slash) {     /*  if a 'date' was entered  */
  360.    if(h == 2) {
  361.       k = clock[1];  
  362.       }
  363.       else {
  364.       k = atoi(temp[2]);
  365.       if(k < 0 || k > 99) mistake("Invalid Year",node);
  366.       if(k >= 80) clock[1] = k - 80; else clock[1] = k + 20;
  367.       }
  368.    if((clock[1] + 1980) % 4 == 0) daymax[2] = 29; else daymax[2] = 28;
  369.    if(i < 0 || i > 12 || j < 1 || j > daymax[i]) mistake("Invalid Date",node); 
  370.    clock[2] = i; clock[3] = j; 
  371.    chgclk(clock);
  372.    }
  373.  
  374. else if(colon) {    /*  if a 'time' was entered  */
  375.    if(i < 0 || i > 23 || j < 0 || j > 59) mistake("Invalid Time",node);
  376.    clock[4] = i;
  377.    clock[5] = j;
  378.    clock[6] = clock[7] = 0;
  379.    chgclk(clock);
  380.    }
  381. /*  confirm the changes  */
  382.    printf("\n%sDate: %s%s %d%s, %d     %sTime: %02d:%02d:%02d\n\n",
  383.            slash ? "New ":"",
  384.            month[clock[2]],
  385.            monthext[clock[2]],
  386.            clock[3],
  387.            ext(clock[3]),
  388.            clock[1] + 1980,
  389.            colon ? "New ":"",
  390.            clock[4],
  391.            clock[5],
  392.            clock[6]);
  393.  
  394.    return(0);   /*  return '0' for success  */
  395. }
  396.  
  397. /*-------------------------------------------------------------------------*/
  398.  
  399. /*  DEFAULTDATE FUNCTION  */
  400.  
  401. void defaultdate(int tznflag, char *timezone,char day[7][4],char dayext[7][4],char month[13][4],unsigned char clock[8],int year_fix)
  402. {
  403.  
  404. printf("%s%sday %02d-%s-%02d %02d:%02d:%02d",
  405.             day[clock[0]],
  406.             dayext[clock[0]],
  407.             clock[3],
  408.             month[clock[2]],
  409.             clock[1] + year_fix,
  410.             clock[4],
  411.             clock[5],
  412.             clock[6]);
  413. if(tznflag) printf(" %s",timezone);
  414.       
  415. }
  416.  
  417. /*-------------------------------------------------------------------------*/
  418.  
  419. /*  EXT FUNCTION  */
  420.  
  421. char *ext(int day)
  422. {
  423. switch(day) {
  424.    case  1:
  425.    case 21:
  426.    case 31: return("st"); 
  427.    case  2:
  428.    case 22: return("nd");
  429.    case  3:
  430.    case 23: return("rd");
  431.    default: return("th");
  432.    }
  433. }
  434.  
  435. /*-------------------------------------------------------------------------*/
  436.  
  437. /* HELPSCREEN FUNCTION  */
  438.  
  439. void helpscreen(int escape_char,char node[])
  440. {
  441. int dhelp;
  442. if(!access("c:datehelp",0)) {
  443.    dhelp = 1 ;
  444.    printf("\x0c");
  445.    }
  446.    else {
  447.    dhelp = 0;
  448.    }
  449. printf("\n   %s      %s %10s %25s\n",node,AUTHOR,VERSION,WRITTEN);
  450. printf("   SYNTAX:  %s [-s] [hh:mm] [mm/dd[/yy]] [-d -n -m xx] [\"format string\"]\n",node);
  451. printf("            -s     Prompts user to set date/time.\n");
  452. printf("         hh:mm     Set time.\n");
  453. printf("    mm/dd[/yy]     Set date, year is optional.            Escape = \"%c\"\n",
  454.    escape_char);
  455. printf("            -d     Automatic Daylight Savings Time adjustment.\n");
  456. printf("            -n     Supress NEWLINE.\n");
  457. printf("            -m xx  Begins date string at xx character position.\n\n");
  458. if(dhelp) system("c:datehelp x");
  459. exit(0);
  460. }
  461.  
  462. /*-------------------------------------------------------------------------*/
  463.  
  464. /*  ISDST FUNCTION  */
  465.  
  466. int isdst(unsigned char clock[8])
  467. {
  468. int year, startyear = 1980 , sday = 6 , eday , leapyear = 0, dstflag = 0;
  469.  
  470. year = clock[1];
  471.  
  472. for(  ; year > 0 ; year--) {
  473.      leapyear = 0;
  474.      startyear++ ;
  475.      if(!(startyear % 4)) leapyear = 1 ;
  476.      sday-- ;
  477.      if(!sday) sday = 7;
  478.      sday -= leapyear;
  479.      if(!sday && leapyear) sday = 7; 
  480.      }                                              /*  Ending for brace */
  481.  
  482. /* Calculate Daylight Savings Time end date using start date              */
  483.  
  484. if((sday + 20) < 25)  eday = sday + 27; else eday = sday + 20;
  485.  
  486. /* Determine if it's daylight savings time NOW                            */
  487.  
  488. if((clock[2] > 4 && clock[2] < 10) ||
  489.     (clock[2] == 4 && clock[3] >= sday && clock[4] >= 2) ||
  490.     (clock[2] == 10 && clock[3] <= eday && clock[4] < 2) ||
  491.     (clock[2] == 4 && clock[3] > sday) ||
  492.     (clock[2] == 10 && clock[3] < eday)) {
  493.     dstflag = 1; 
  494.     }
  495. return(dstflag);
  496. }
  497.  
  498. /*-------------------------------------------------------------------------*/
  499.  
  500. /*  MISTAKE FUNCTION  */
  501.  
  502. void mistake(char description[],char node[])
  503. {
  504. printf("\n\07  ERROR: %s  --> %s.\n\n",node,description);
  505. exit(5);
  506. }
  507.  
  508. /*-------------------------------------------------------------------------*/
  509.  
  510. /*  QUITCHECK FUNCTION  */
  511.  
  512. void quitcheck(char xxx[])  
  513. {
  514. if(xxx[0] == 'q' || xxx[0] == 'Q') {
  515.    puts("\n");
  516.    exit(0) ;
  517.    }
  518. }
  519.  
  520. /*-------------------------------------------------------------------------*/
  521.  
  522. /*  SETDATE FUNCTION  */
  523.  
  524. void setdate(unsigned char clock[8],int daymax[13],char month[13][4],char monthext[13][7],char node[])
  525. {
  526. char input[30];
  527. int temp;
  528. char current[] = "The current ";
  529. char accept[] = " or <return> to accept [q]: ";
  530. char new[] = " enter new ";
  531.  
  532. while(TRUE) {
  533.       printf("\x0c\n\n\n  Set DATE/TIME Utility.                 by %s\n\n",AUTHOR);
  534.       while(TRUE) {
  535.          printf("\n  %syear is %2d,  %syear%s",
  536.             current,
  537.             clock[1] + 1980,
  538.             new,
  539.             accept);
  540.          gets(input);
  541.          quitcheck(input);
  542.          if(strcmp(input,"")) {
  543.             temp = atoi(input);
  544.             if(temp > 2040 || temp < 1980) {
  545.                printf("\n\07            ERROR:  Invalid Year (1980 - 2040).\n\n");
  546.                continue ;
  547.                }
  548.                else {
  549.                clock[1] = temp - 1980;
  550.                }
  551.             }
  552.          break ;
  553.          }
  554.  
  555.       while(TRUE) {
  556.          printf("\n   %smonth is %02d, %smonth%s",
  557.             current,
  558.             clock[2],
  559.             new,
  560.             accept);
  561.          gets(input);
  562.          quitcheck(input);
  563.          if(strcmp(input,"")) {
  564.             temp = atoi(input);
  565.             if(temp < 1 || temp > 12 ) {
  566.                printf("\n\07            ERROR:  Invalid Month (1 - 12).\07\n\n");
  567.                continue ;
  568.                }
  569.                else {
  570.                clock[2] = temp;
  571.                }
  572.             }
  573.          break ;
  574.          }
  575.  
  576.       if((clock[1] + 1980) % 4 == 0) daymax[2] = 29 ;
  577.       if(clock[3] > daymax[clock[2]] ) { 
  578.          printf("\n            NOTE:  %sday is invalid for %d.\n\n",
  579.                 current,
  580.                 clock[1] + 1980);
  581.          }
  582.    
  583.       while(TRUE) {
  584.          printf("\n     %sday is %02d,   %sday%s",
  585.             current,
  586.             clock[3],
  587.             new,
  588.             accept);
  589.          gets(input);
  590.          quitcheck(input);
  591.          if(strcmp(input,"")) {
  592.             temp = atoi(input);
  593.             if(temp < 1 || temp > daymax[clock[2]]) {
  594.                printf("\n\07            ERROR:  Invalid Day (1 - %d).\n\n",daymax[clock[2]]);
  595.                continue ;
  596.                }
  597.                else {          
  598.                clock[3] = temp;
  599.                }
  600.             }
  601.          if(clock[3] > daymax[clock[2]] ) {   
  602.          printf("\n            ERROR:  %sday is invalid for %d.\n\n",
  603.                 current,
  604.                 clock[1] + 1980);
  605.             continue ;
  606.             }
  607.          break ;
  608.          }
  609.  
  610.       while(TRUE) {
  611.          printf("\n    %shour is %02d,  %shour%s",
  612.             current,
  613.             clock[4],
  614.             new,
  615.             accept);
  616.          gets(input);
  617.          quitcheck(input);
  618.          if(strcmp(input,"")) {
  619.             temp = atoi(input);
  620.             if((temp > 0 && temp < 24) ||
  621.                !strcmp(input,"0") || !strcmp(input,"00")) {
  622.                clock[4] = temp;
  623.                }
  624.                else {
  625.                printf("\n\07            ERROR:  Invalid Hour (00 - 23).\n\n");
  626.                continue ;
  627.                }
  628.             }
  629.          break ;
  630.          }
  631.  
  632.       while(TRUE) {
  633.          printf("\n  %sminute is %02d,%sminute%s",
  634.             current,
  635.             clock[5],
  636.             new,
  637.             accept);
  638.          gets(input);
  639.          quitcheck(input);
  640.          if(strcmp(input,"")) {
  641.             temp = atoi(input);
  642.             if((temp > 0 && temp < 60) ||
  643.                !strcmp(input,"0") || !strcmp(input,"00")) {
  644.                clock[5] = temp;
  645.                }
  646.                else {
  647.                printf("\n\07            ERROR:  Invalid Minute (00 - 59).\n\n");
  648.                continue;
  649.                }
  650.             } 
  651.          break ;
  652.          }
  653.  
  654.       printf("\n\n      The system clock will be set to: %02d-%s%s-%d %02d:%02d:00\n",
  655.               clock[3],
  656.               month[clock[2]],
  657.               monthext[clock[2]],
  658.               clock[1] + 1980,
  659.               clock[4],
  660.               clock[5]);
  661.       printf("\n\n      Do you want to q\(uit\), s\(et\) or e\(dit\) the date/time. [q,S,e]: ");
  662.       gets(input);
  663.       quitcheck(input);
  664.    if(input[0] == 'e' || input[0] == 'E') {
  665.         putchar('\n');
  666.         continue ;
  667.         }
  668.       clock[6] = 0;
  669.      if(chgclk(clock)) mistake("Can't set SYSTEM CLOCK",node);
  670.       putchar('\n');
  671.       exit(0);
  672.    }
  673. putchar('\n');
  674. exit(0);
  675. }
  676.  
  677. /*-------------------------------------------------------------------------*/
  678.  
  679. /*  TWELVE FUNCTION  */
  680.  
  681. int twelve(int hour)
  682. {
  683. if(hour > 13) {
  684.    return(hour - 12);
  685.    }
  686.    else {
  687.    if(!hour) {
  688.       return(12);
  689.       }
  690.       else {
  691.       return(hour);
  692.       }
  693.    }
  694.  
  695. /*-------------------------------------------------------------------------*/
  696.  
  697. /*-------------------------------------------------------------------------*\
  698.  
  699. 10/04/89 v1.10:  Removed the requirement for strings to begin with a !
  700. 10/29/89         Re-compiled with variable assignments changed.
  701. 11/01/89 v1.11b: Re-compiled with Lattice 5.04
  702. 12/30/89 v1.14:  Added daylight savings time functions.
  703.                  Added command line date and time set options.
  704.                  Removed all global variables.
  705. 01/11/90 v1.15b: Re-compiled with Lattice 5.04a, fix for getenv
  706. 01/14/90 v1.15c: Add env DEFAULT to change the default date string.
  707.  
  708. \*-------------------------------------------------------------------------*/
  709.